package co.com.bean.area;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.AreaDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.AreaFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartArea;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class AreaBean
 */
@Stateless(mappedName = "ejb/AreaBean")
public class AreaBean implements AreaBeanLocal{
	private AreaFacadeLocal facade;

	public AreaBean() {
		facade = DelegateContextEJB.getAreaFacadeLocal();
	}

	@Override
	public ResponseJson insertarArea(AreaDTO areaDTO) {

		ResponseJson response = new ResponseJson(); 
		try {
			facade.create(Mapper.mapperDtoToSmartArea(areaDTO));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area almacenada.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+"Area almacenada.");
		} catch (Throwable e) {
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el area.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public List<AreaDTO> consultarAllArea(){
		List<AreaDTO> area = new ArrayList<AreaDTO>();
		for (SmartArea entity : facade.findAll()) {
			if(entity.getSmfhretiro() == null){
				area.add(Mapper.mapperSmartAreaToDto(entity));
			}
		}
		return area;
	}

	@Override
	public AreaDTO consultarAreaId(AreaDTO areaDTO) {
		AreaDTO area = new AreaDTO();
		SmartArea entity  = facade.find(areaDTO.getScarea());
		if(entity != null && entity.getSmfhretiro() == null){
			area = Mapper.mapperSmartAreaToDto(entity);
		}
		return area;
	}

	@Override
	public ResponseJson editArea(AreaDTO area) {
		ResponseJson response = new ResponseJson(); 
		try {
			area.setFhmodificacion(new Date());
			facade.edit(Mapper.mapperDtoToSmartArea(area));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area editada.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area editada.");
		} catch (Throwable e) {
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el area.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}

	@Override
	public ResponseJson removeArea(AreaDTO area,  boolean logic) {
		ResponseJson response = new ResponseJson(); 
		if(logic){
			try {
				area.setFhretiro(new Date());
				area.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperDtoToSmartArea(area));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area inactivada");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area inactivada.");
			} catch (Throwable e) {
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el area.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}else{
			try {
				facade.remove(Mapper.mapperDtoToSmartArea(area));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area eliminada");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Area eliminada.");
			} catch (Throwable e) {
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el area.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}
		return response ;
	}
}
